package ar.uba.fi.tecnicas.testing;

import ar.uba.fi.tecnicas.fabrica.*;
import junit.framework.TestCase;

public class AlmacenTest extends TestCase 
{
	private TipoMateriaPrima azucar = new TipoMateriaPrima("Azucar", 2.0, "kg");
	private TipoMateriaPrima arroz = new TipoMateriaPrima("Arroz", 1.5,"kg");
	private TipoMateriaPrima harina = new TipoMateriaPrima("Harina", 2.5,"kg");
	private TipoMateriaPrima trigo = new TipoMateriaPrima("Trigo", 2.5, "kg");

	public void setUp() 
	{
		MateriaPrima materiaPrima1 = new MateriaPrima(azucar,10);
		MateriaPrima materiaPrima2 = new MateriaPrima(arroz,15);
		MateriaPrima materiaPrima3 = new MateriaPrima(harina,20);
		Almacen.instancia.agregarNuevaMateriaPrima(materiaPrima1);
		Almacen.instancia.agregarNuevaMateriaPrima(materiaPrima2);
		Almacen.instancia.agregarNuevaMateriaPrima(materiaPrima3);
	}
	
	public void testCantidadMateriasPrimas()
	{
		int cantElementos = Almacen.instancia.getMateriasPrimas().size();
		assertEquals(3, cantElementos);
	}
	
	public void testAgregarNuevaMateriaPrima()
	{
		MateriaPrima materiaPrima4 = new MateriaPrima(trigo, 40);
		Almacen.instancia.agregarNuevaMateriaPrima(materiaPrima4);
		int cantElementos=Almacen.instancia.getMateriasPrimas().size();
		assertEquals(4,cantElementos);
	}
	
	public void testExisteMateriaPrima()
	{
		assertTrue(Almacen.instancia.existeEnAlmacen(azucar));
		assertFalse(Almacen.instancia.existeEnAlmacen(trigo));
	}
	
	public void testAumentarCantidadEnStock()
	{
		Almacen.instancia.aumentarCantidadEnStock(azucar, 3);
		assertEquals(13.0,Almacen.instancia.getMateriaPrima(azucar).getCantidad(), 0.0);
	}
	
	public void testExisteMateriaPrimaEnEnStock()
	{
		assertTrue(Almacen.instancia.existeEnAlmacen(arroz));
	}
	
	public void testNoExisteMateriaPrimaEnEnStock()
	{
		assertTrue(Almacen.instancia.existeEnAlmacen(harina));
	}
	
	public void testExisteCantidadSuficiente() 
	{
		assertTrue(Almacen.instancia.cantidadSuficiente(azucar, 5));
	}
	
	public void testSolicitarMateriaPrima() 
	{
		MateriaPrima materiaPrima = Almacen.instancia.getFraccion(azucar, 5);
		assertEquals(5.0, materiaPrima.getCantidad(), 0);
	}
	
	public void testStockSobrante() 
	{
		Almacen.instancia.getFraccion(azucar, 5);

		assertEquals(5, Almacen.instancia.getMateriaPrima(azucar).getCantidad(), 0);
	}
	
	public void testMateriaPrimaAgotada() 
	{
		MateriaPrima materiaPrima=Almacen.instancia.getFraccion(azucar, 10);
		
		assertFalse(Almacen.instancia.existeEnAlmacen(materiaPrima.getTipo()));
	}
	
	public void tearDown() 
	{
		Almacen.instancia.getMateriasPrimas().clear();
	}
}
